Skip to main content

FAQs

为什么 Zapier 不支持更新的 Node.js 版本?

我们使用 AWS Lambda 运行您的代码,而 AWS Lambda 只支持少数 版本 的 Node.js。有时这不包括最新版本。此外,由于 Zapier 平台上有数千个集成在运行,我们必须确保升级到最新 Node.js 版本不会造成负面影响。

如何手动设置 Node.js 版本来运行我的集成?

更新 package.json 中的 zapier-platform-core 依赖项。每种主要版本都对应特定版本的 Node.js。您可以在 这里 找到映射关系。我们只支持 AWS Lambda 支持的版本。

重要注意事项:AWS 会定期弃用已达到生命周期末期的 Node.js 版本。他们会在 博客 上发布公告。类似信息和日期可以在 GitHub 上找到。在该日期到来之前,我们会发布一个针对更新 Node.js 版本的 core 版本。

如果您在截止日期前未升级,AWS 在尝试运行您的集成代码时可能会抛出错误。如果发生这种情况,我们会改用仍受支持的最旧 Node.js 版本。总之,如果您不定期更新集成依赖项,我们可能会在您意料之外使用更新的 Node.js 版本运行您的代码。

什么时候使用占位符或花括号?

在示例中,您会看到 模板字面量占位符 $\{var\} 和(双)“花括号” {\{var}\}

经验法则:在函数内部使用 $\{var\},在 简写请求 中使用 {\{var}\}

模板字面量占位符会在代码行执行时立即求值。这意味着,如果您在触发器配置的简写请求中使用 $\{process.env.VAR\},那么 zapier push 在构建您的集成时会用本地环境的 VAR 值替换它,因此通过 zapier env:set 设置的值不会被使用。

如果您不熟悉 模板字面量,请知道 const val = "a" + b + "c" 本质上等同于:

const val = `a${b}c`;

从 v17 开始,z.request() 如果在请求对象中包含 {\{var}\},会抛出错误。

Zapier 是否支持 XML (SOAP) API?

Zapier 本身不支持,但可以通过实现来支持!用户报告说,以下 npm 模块与 CLI 平台兼容:

从 core v10 开始,简写请求 可以解析 XML。通过一个 afterResponse 中间件response.data 设置为解析后的 XML:

const xml = require("pixl-xml");
const App = {
// ...
afterResponse: [
(response, z, bundle) => {
// 仅在 core v10+ 中有效!
response.throwForStatus();
response.data = xml.parse(response.content);
return response;
},
],
// ...
};

分页是怎么回事?什么时候使用以及如何工作?

已移至 分页

去重是如何工作的?

每次轮询 Zap 运行时,Zapier 会从响应中的每个项目提取一个唯一的“主键”。Zapier 需要决定哪些项目应该触发 Zap。为此,我们会将这些主键与之前见过的主键进行比较,针对新对象触发 Zap,并更新已见主键列表。当 Zap 开启时,我们会通过一次轮询初始化已见主键列表;当 Zap 关闭时,我们会清除该列表。因此,确保轮询端点调用始终返回最新项目非常重要。

例如,初始轮询返回对象 4、5 和 6(其中主键越大越新)。如果后续轮询增加了限制并返回对象 1-6,那么 1、2 和 3 将被(错误地)视为新对象。

默认情况下,primary 键是项目的 id 字段。从 v15.6.0 开始,您可以通过在 outputFields 中将 primary 设置为 true 来自定义 primary 键。

这里 有更详细的解释。

为什么我的触发器在没有提供显式 id 字段时会报错?

为了让去重功能正常工作,我们需要能够识别和使用一个唯一字段。在旧的、传统的 Zapier Web Builder 集成中,如果没有 id,我们会猜测。但为了确保我们不会猜错,现在我们要求开发者提供 id 字段。如果您的对象有一个不同名称的唯一字段,可以调整以下代码片段,并确保测试通过:

// ...
let items = response.data.items; // 或 response.json.items,如果您使用的是 core v9 或更旧版本
return items.map((item) => {
item.id = item.contactId;
return item;
});

从 v15.6.0 开始,您也可以定义一个或多个 outputFields 作为 primary,而非使用默认的 id 字段。例如:

{
triggers: {
recipe: {
operation: {
outputFields: [
{ key: "userId", primary: true },
{ key: "slug", primary: true },
{ key: "name" },
];
}
}
}
}

这会告诉 Zapier 使用 (userId, slug) 作为唯一的去重主键。

限制:primary 选项目前不支持将顶层字段与使用双下划线键的嵌套字段混合使用。例如,如果您在 iduser__id 上都设置 primary: true,那么 user__id 上的设置会被忽略;仅 id 用于去重。但是,如果所有 primary 字段都是嵌套的(如 user__id + user__name),它会按预期工作。

Node X 不再受支持

如果您看到以下错误:

InvalidParameterValueException An error occurred (InvalidParameterValueException) when calling the CreateFunction operation: The runtime parameter of nodejs6.10 is no longer supported for creating or updating AWS Lambda functions. We recommend you use the new runtime (nodejsX.Y) while creating or updating functions.

… 那么您需要将 zapier-platform-core 依赖项更新到使用更新 Node.js 版本的非弃用版本。请尽快完成以下步骤:

  • 编辑 package.json,使其依赖于更晚的主要版本的 zapier-platform-core。可以在 变更日志 中找到所有重大更改(标记为 )。

  • 递增 package.json 中的 version 属性。

  • 确保本地使用 Node.js v18(或更高版本)(运行 node -v)。如果需要,使用 nvm 切换版本。

  • 运行 rm -rf node_modules && npm i 以获取最新副本。

  • 运行 zapier test 以确保测试仍通过。

  • 运行 zapier push

  • 运行 zapier promote YOUR_NEW_VERSION(来自步骤 2)。

  • 将用户从旧版本迁移到新版本(zapier migrate OLD_VERSION YOUR_NEW_VERSION)。

哪些分析数据会被收集?

从 v8.4.0 开始,Zapier 会收集每个 CLI 工具调用的信息。

这些数据仅用于改进 CLI 体验,不会用于广告或其他非产品目的。有 3 种基于每台计算机的收集模式。

匿名模式

当您在 anonymous 模式下运行命令时,以下数据会发送给 Zapier:

  • 您运行的命令

  • 该命令是否为已知命令

  • 您提供的参数数量(但不包括参数内容)

  • 您使用的标志(但不包括标志内容)

  • 您使用的 CLI 版本

  • CLI 命令运行的集成应用

启用模式(默认)

当分析完全 enabled 时,除了上述数据外,还会发送:

  • 您的操作系统(调用 process.platform 的结果)

  • 您的 Zapier 用户 ID

禁用模式

最后,分析可以完全 disabled,通过运行 zapier analytics --mode disabled 或将环境变量 DISABLE_ZAPIER_ANALYTICS 设置为 1

我们会非常小心地不收集任何关于您文件系统或其他机密信息。您可以通过在任何命令前加上 DEBUG=zapier:analytics 来查看实时收集的内容。

“App”和“Integration”有什么区别?

我们正在 Zapier 营销术语中进行一些重命名。最终,我们会在所有地方使用“integration”。在此之前,请知道这些术语是可互换的,都描述了您编写的连接 API 到 Zapier 的代码。

performGet 是什么作用?

performGet 方法是 Zapier 中的一个可选功能,用于检索对象的详细信息。例如,如果您的 create 操作的 perform 方法只返回新对象的 ID,您可以使用 performGet 通过该 ID 获取对象的完整属性。performGet 仅适用于 CreateSearch 操作,并且在初始 perform 结果有限且需要更多信息时最有用。每次 createsearch 运行时,perform 的结果会自动通过 bundle.inputData 传递给 performGet,从而允许您获取更全面的详细信息。请注意,performGet 仅在 perform 返回的结果不为空时才会被调用。